Перейти к основному содержимому

5.03. ООП в Java

Разработчику Архитектору

Принципы ООП в Java

Java – язык ООП, организованный вокруг объектов, а не только функций и логики.

Инкапсуляция

Инкапсуляция скрывает внутреннюю реализацию объекта и предоставляет контролируемый доступ через методы – геттеры и сеттеры:

public class Person {
private String name; // приватное поле

public String getName() { // геттер
return name;
}

public void setName(String name) { // сеттер
this.name = name;
}
}

Внешний код может взаимодействовать с name только через методы getName() и setName().

Инкапсуляция — это механизм объединения данных (переменных) и методов, работающих с этими данными, в одном классе, с ограничением прямого доступа к внутренним компонентам объекта. В Java инкапсуляция достигается с помощью модификаторов доступа (private, protected, public), а также через предоставление публичных методов для чтения и изменения значений полей.

Наследование

Наследование – один класс (потомок/подкласс) может наследовать поля и методы другого класса (предка/суперкласса):

class Animal {
void makeSound() {
System.out.println("Какой-то звук");
}
}

class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Гав!");
}
}

Dog имеет доступ ко всем public и protected членам Animal, и наследуется через ключевое слово extends, а @Override – это переопределение метода makeSound(), который уточняет, что за звук издаст собака.

Наследование — это механизм ООП, позволяющий создавать новый класс на основе уже существующего. Новый класс (подкласс) получает все свойства и методы родительского класса (суперкласса), что обеспечивает повторное использование кода и упрощает поддержку.

Наследование реализуется с помощью ключевого слова extends. Подкласс может расширять или переопределять поведение суперкласса, а также добавлять новые поля и методы. Важно помнить, что в Java класс может наследоваться только от одного суперкласса.

Полиморфизм

Полиморфизм – объект может принимать много форм, и один интерфейс может использоваться для представления разных типов:

Animal myPet = new Dog();
myPet.makeSound(); // Гав!

myPet – это класс Animal, но ссылается на объект типа Dog – это динамический полиморфизм.

Абстракция

Абстракция – скрывает сложную реализацию и предоставляет простой интерфейс:

abstract class Vehicle {
abstract void startEngine();
}

class Car extends Vehicle {
void startEngine() {
System.out.println("Двигатель машины заведён!");
}
}

Класс Vehicle абстрагирует детали запуска двигателя, оставляя подклассам реализацию.

Абстракция — это принцип ООП, который позволяет выделять в программе только значимые характеристики объекта, скрывая внутренние детали реализации. В Java абстракция достигается через абстрактные классы и интерфейсы.

Абстрактный класс может содержать как реализованные, так и абстрактные (без реализации) методы, задавая общий шаблон для подклассов. Интерфейс определяет набор методов, которые класс обязан реализовать.

Абстракция упрощает взаимодействие с объектами, повышает гибкость и снижает связанность кода, концентрируя внимание на "что делает" объект, а не "как он это делает".